/* Copyright (C) 2011 David P Shenba
 *
 * This code is free software ('free' as in freedom): you can
 * redistribute it and/or modify it under the terms of the GNU
 * General Public License (GNU GPL) as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 *
 * As additional permission under GNU GPL version 3 section 7, you
 * may distribute non-source (e.g., minimized or compacted) forms of
 * that code without the copy of the GNU GPL normally required by
 * section 4, provided you include this license notice and a URL
 * through which recipients can access the Corresponding Source.
 */

String.prototype.trim = (function() {
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
});

function isDirty(parentTagId) {
	var childs = document.getElementById(parentTagId).getElementsByTagName('*');
	var i = 0;
	while (child = childs[i++]) {
		switch (child.type) {
		case 'text':
		case 'textarea':
		case 'hidden':
			if (child.value.trim() != child.defaultValue) {
				return true;
			}
			break;
		case 'checkbox':
		case 'radio':
			if (child.checked != child.defaultChecked) {
				return true;
			}
			break;
		case 'select-one':
		case 'select-multiple':
			var j = 0;
			var optionSelected = false;
			while (option = child.options[j++]) {
				if (option.defaultSelected) {
					optionSelected = true;
				}
			}
			j = optionSelected ? 0 : 1;
			while (option = child.options[j++]) {
				if (option.selected != option.defaultSelected) {
					return true;
				}
			}
			break;
		}
	}
}